﻿#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//#include<stdio.h>
//int main()
//{
//	printf("hello");
//	return 0;
//}
//#include<iostream>
//int main()
//{
//	std::cout << "hello world" << std::endl;
//	return 0;
//}
//#include<iostream>
//#include<stdlib.h>
//namespace bit
//{
//	int rand = 10;
//}
//int main()
//{
//	printf("%d", bit::rand);
//	return 0;
//}
//#include<iostream>
//namespace Sum
//{
//	namespace add
//	{
//		int Fuction(int x, int y)
//		{
//			return x + y;
//		}
//	}
//	namespace mul
//	{
//		int Fuction(int x, int y)
//		{
//			return x * y;
//		}
//	}
//}
//int main()
//{
//
//	printf("%d ", Sum::add::Fuction(2, 3));
//	printf("%d ", Sum::mul::Fuction(3, 4));
//	return 0;
//}
//#include<iostream>
//namespace byte
//{
//    int a = 1;
//    int b = 2;
//}
//using byte::a;
//int main()
//{
//
//    printf("%d ", a);
//    return 0;
//}
//#include<iostream>
//using namespace std;
//int main()
//{	
//	int a = 0;
//	double b = 0.0;
//	char c = '0';
//	//输入
//	cin >> a >> b >> c;
//	//输出
//	cout << a << ' ' << b << ' ' << c;
//	return 0;
//}
//#include<iostream>
//void fact(int a = 1 ,int b = 2 ,int c = 3);
//void fact(int a, int b, int c)
//{
//	//std::cout << a << ' ' << b << ' ' << c << std::endl;
//	std::cout << " a = " << a << std::endl;
//	std::cout << " b = " << b << std::endl;
//	std::cout << " c = " << c << std::endl;
//}
//int main()
//{
//	//fact();//全缺省
//	fact(2, 3);//
//	//fact(3, 4, 5);
//	return 0;
//}

//函数重载
//#include<iostream>
//using namespace std;
//int Add(int left, int right)
//{
//	cout << "int Add(int left,int right)" /*<< left + right*/ << endl;
//	return left + right;
//}
//double Add(double left, double right)
//{
//	cout << "double Add(double left,double right)" /*<< left + right*/ << endl;
//	return left + right;
//
//}
//int main()
//{
//	cout << Add(10, 20) << endl;
//	cout << Add(10.4, 20.2) << endl;
//
//	return 0;
//}
//返回值不同不会构成重载

//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a = 10 )
//{
//	cout << "f( int a )" << endl;
//}
//int main()
//{
//	f(3);
//	f();//此时对函数调用会有歧义
//	return 0;
//}
//引用
//int main()
//{
//	int a = 0;
//	//b和c是a的别名
//	int& b = a;
//	int& c = a;
//	//对b在取别名
//	int& d = b;
//	d++;
//	int f = 20;
//	d = f;
//	cout << "a = " << a << ' ' << "&a = " << &a << endl;
//	cout << "b = " << b << ' ' << "&b = " << &b << endl;
//	cout << "c = " << c << ' ' << "&c = " << &c << endl;
//	cout << "d = " << d << ' ' << "&d = " << &d << endl;
//	cout << "f = " << f << ' ' << "&f = " << &f << endl;
//	
//	return 0;
//}
//引用的特性
//引用在定义的时候要初始化
//引用实体了以后不能在做修改
//引用与指针类似
//void swap(int& rx, int& ry)
//{
//	int tmp = rx;
//	rx = ry;
//	ry = tmp;
//}
//int main()
//{
//	int x = 0;
//	int y = 19;
//	cout << "交换前  " <<"x = " << x <<' '<<"y = " << y << endl;
//	swap(x,y);
//	cout << "交换后  " << "x = " << x << ' ' << "y = " << y << endl;
//
//	return 0;
//}
//int &Add(int x, int y)
//{
//	int sum = x + y;
//	return sum;//会造成野引用
//}
//int main()
//{
//	//Add(2, 3) += 3;
//	cout << " x + y =  " << Add(2, 3)  << endl;
//	return 0;
//}
//int main()
//{
//	const int a = 10;
//	//int& ra = a;//权限被放大(此时对a取别名二者本质是一样的，是同一块空间，不能修改原本的权限)
//	const int& ra = a;//将原本放大权限的别名ra加上const修饰，此时权限平移
//	//权限的缩小
//	int b = 20;
//	const int& rb = b;//此时权限被缩小
//	int rra = a;//将a的值赋值给rra，原本a的权限并没有被修改，不是同一块空间
//	rra = 20;
//	cout << "rra = " << rra << endl;
//	cout << "a = " << a << endl;
//	//指针的权限放大与缩小
//	//放大
//	const int* pa = &a;
//	//int* ppa = pa;
//	//权限的缩小
//	int* pb = &b;
//	const int* ppb = pb;
//
//	return 0;
//}
//int main()
//{
//	int a = 10;
//	const int& ra = a;
//	double d = 2.2;
//	int c = d;//此时强制类型转化,不会报错
//	//cout << "c = " << c << endl;
//	const int& rc = d;//此时报错不是因为类型的不同，(类型转化会产生临时对象---临时对象具有常性不能修改)涉及到权限的放大,加上const即可
//	/*float e = 2;
//	int& re = e;*/
//	return 0;
//}
//template<class T>
//void Swap( T& ra,  T& rb)
//{
//	T tmp = ra;
//	ra = rb;
//	rb = tmp;
//}
//int main()
//{
//	int x1 = 3;
//	int y1= 4;
//	printf("交换前:");
//	cout << x1 << '\t' << y1 << endl;
//	printf("交换后:");
//
//	Swap(x1, y1);
//	cout << x1 << '\t' << y1 << endl;
//	double x2 = 2.2;
//	double y2 = 3.3;
//	printf("交换前:");
//	cout << x2 << '\t' << y2 << endl;
//	printf("交换后:");
//
//	Swap(x2, y2);//此时会导致类型的不统一
//	cout << x2 << '\t' << y2 << endl;
//
//
//
//	return 0;
//}
//————————————————
//————————指针和引用的关系
//————————————————
//int main()
//{
//	//取别名不开空间，取地址开辟空间
//	int a = 10;
//	int& ra = a;
//	printf("ra = %p ,a = %p\n", &ra, &a);
//	int* pa = &a;
//	printf("a = %p ,pa = %p", &a, &pa);
//	//引用必须初始化，指针建议初始化
//	//引用在初始化引用一个对象后就不在能引用其他对象;而指针可以不断改变指向对象
//	//引用可以直接访问对象，但指针需要解引用才可以访问对象
//	//sizeof的含义不同---引用结果为引用类型的大小，但指针始终是地址空间所占字节数
//	//指针容易出现野指针，引用很少出现野引用
//
//	return 0;
//}
//扩展知识
//int main()
//{
//	int a = 10;
//	int& ra = a;
//
//	int b = 20;
//	int* pb = &b;
//	//在汇编层面没有引用概念，引用在底层是使用指针的构建的
//	return 0;
//}
//#define Add(a,b) ((a) + (b))
//int main()
//{
//	cout << Add(2, 3) << endl;
//	cout << Add(2 << 1, 2 >> 1) << endl;
//	cout << Add(2, 3) * 5 << endl;
//	return 0;
//}
//#include<iostream>
//using namespace std;
//inline int Add(int x, int y)
//{
//	int ret = x + y;
//	ret += 1;
//	ret += 1;
//	ret += 1;
//	return ret;
//}
//int main()
//{
//	// 可以通过汇编观察程序是否展开​
//	// 有call Add语句就是没有展开，没有就是展开了​
//	int ret = Add(1, 2);
//	cout << Add(1, 2) * 5 << endl;
//	return 0;
//}
#include"T.h"

int main()
{
	T(1);
	return 0;
}